/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servlets;

import DTOs.DTOAerolinea;
import businessDelegate.BusinessDelegate;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author williamprado
 */
public class flightsServlet extends HttpServlet {
   
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String target = request.getParameter("action");
        HttpSession session = request.getSession();
        try {
            if(target==null){
            session.setAttribute("error", "Lo sentimos. Ha ocurrido un error procesando la solicitud.");
            response.sendRedirect("error.jsp");
            }else if(target.equals("searchFlights")){
                String cou1 = "";
                String cou2 = "";
                String fecha = "";
                String idciudad1 = "";
                String idciudad2 = "";
                int a1 = 0;
                int a2 = 0;
                List<VOs.City> clist1 = null;
                List<VOs.City> clist2 = null;
                VOs.City city1 = null;
                VOs.City city2 = null;
                List<VOs.Country> countr = null;
                int id1=0, id2=0;
                boolean tipoBusqueda=false;
                businessDelegate.BusinessDelegate bd = new businessDelegate.BusinessDelegate();
                try{
                    fecha = request.getParameter("date1");
                    idciudad1 = request.getParameter("city1");
                    idciudad2 = request.getParameter("city2");
                    try{
                        id1=Integer.parseInt(idciudad1);
                        id2=Integer.parseInt(idciudad2);
                        tipoBusqueda = true;
                    }catch(Exception e){
                        id1=0;
                        id2=0;
                        tipoBusqueda = false;
                    }
                    out.println(fecha);
                    out.println(id1);
                    out.println(id2);
                    out.println(idciudad1);
                    out.println(idciudad2);
                    out.println(tipoBusqueda);
                    List<DTOAerolinea> dto = bd.vuelosDisponibles(fecha, id1, id2, tipoBusqueda);
                    out.println(dto.size());
                    //DTOAero
                    session.setAttribute("DTOAero", dto);
                    response.sendRedirect("buscarVuelos.jsp");
                }catch(Exception ex){
                    String mensaje="Ocurrio un error <br>";
                    mensaje=mensaje+ex.getMessage();
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("buscarVuelos.jsp").include(request, response);
                }
            }else if(target.equals("reserve")){
                String id = request.getParameter("id");
                
                int ub=-1;
                long idv=0;
                //session.setAttribute("DTOAero", dto);
                List<DTOs.DTOAerolinea> dto = (List<DTOs.DTOAerolinea>) session.getAttribute("DTOA");
                List<DTOs.DTOAerolinea> dtoBusqueda = (List<DTOs.DTOAerolinea>) session.getAttribute("DTOAero");
                if(dtoBusqueda==null||id.equals("")||id==null){
                    String mensaje="Acción invalida";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("buscarVuelos.jsp").include(request, response);
                }
                try{
                    idv = Long.parseLong(id);
                }catch(Exception e){
                    String mensaje="Ha ocurrio un error al agregar al carro de compra <br> Error: ID del vuelo invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("buscarVuelos.jsp").include(request, response);
                }
                for(int i=0; i<dtoBusqueda.size();i++){
                    if(idv == dtoBusqueda.get(i).getIdvuelo()){
                        ub=i;
                    }
                }
                System.out.println("mirar id "+ub);
                System.out.println("id "+idv);
                if(ub==(long)-1){
                    String mensaje="Ha ocurrio un error al agregar al carro de compra <br> Error: ID del vuelo invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("buscarVuelos.jsp").include(request, response);
                }
                if(dto==null){
                    dto = new ArrayList<DTOAerolinea>();
                    dto.add(dtoBusqueda.get(ub));
                }else{
                    boolean esta = false;
                    for(int i =0; i<dto.size();i++){
                        if(idv == dto.get(i).getIdvuelo()){
                            esta = true;
                        }
                    }
                    if(esta){
                        String mensaje="El vuelo ya esta en el plan";
                        request.setAttribute("error", mensaje);
                        request.getRequestDispatcher("buscarVuelos.jsp").include(request, response);
                    }else{
                        dto.add(dtoBusqueda.get(ub));
                    }
                }
                session.setAttribute("DTOA", dto);
                String mensaje="El vuelo se ha agregado al plan";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("buscarVuelos.jsp").include(request, response);
            }else if(target.equals("remove")){
            int listPlace = -1;
            int idFlight = 0;
            String place = request.getParameter("pl");
            String idf = request.getParameter("id");
            List<DTOs.DTOAerolinea> flightsCart = (List<DTOs.DTOAerolinea>) session.getAttribute("DTOA");
            if(flightsCart == null || place == null || idf == null || place.equals("") || idf.equals("")){
                String mensaje="Ha ocurrido un error";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("carro.jsp").include(request, response);
            }else{
                try{
                    listPlace = Integer.parseInt(place);
                    idFlight = Integer.parseInt(idf);
                    System.out.println("ubicacion lista "+listPlace);
                }catch(Exception e){
                    String mensaje="Ha ocurrido un error al eliminar del carro de compra <br> Error: el ID del vuelo es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }
                if(listPlace == -1){
                    String mensaje="Ha ocurrido un error al eliminar del carro de compra <br> Error: el ID del vuelo es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }
                boolean exists = false;
                if(flightsCart.get(listPlace) != null){
                    if(idFlight == flightsCart.get(listPlace).getIdvuelo()){
                        exists = true;
                    }
                }else{
                    String mensaje="Ha ocurrido un error al eliminar del carro de compra <br> Error: el ID del vuelo es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }
                if(!exists){
                    String mensaje="La reserva de vuelo no puede eliminarse del carro porque no está en el plan";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }else{
                    flightsCart.remove(listPlace);
                }
                session.setAttribute("DTOA", flightsCart);
                String mensaje="La reserva de vuelo se ha eliminado del plan";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("carro.jsp").include(request, response);
            }
         }
            
        }catch(Exception e){
            System.out.println("error");
            response.sendRedirect("index.jsp");
        }
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
